<?php
/**
 * Classe de gestion de menu déroulant horizontal
 * 
 * Cette classe est liée à des fichiers de styles CSS et javascript.
 * Elle gère uniquement la génération du code HTML avec styles
 * 
 * @author     Philippe MARASSE <philippe.marasse@ac-poitiers.fr>
 * @copyright  Division Informatique et Réseaux - Académie de Poitiers
 * @license    http://www.opensource.org/licenses/gpl-license.php
 */
require_once('class.dirapMenuItemInterface.inc.php');

class dirapMenu implements dirapMenuItemInterface {

    /**
     * Component
     * @var dirapMenuItemInterface
     * @access public
     */
    public $menuItems = array() ;
    
    // Expanded interface : dirapMenuItemInterface

    /**
     * @access public
     * @return string
     */

    public final  function getHTML($in_position) {
        
        if (count($this->menuItems) == 0) {
            return '';
        }
        $lc_html  = "\n<!-- dirapMenu -->\n";
        $lc_html .= '<ul class="menulist">';
        $lc_pos   = 1;
        
        foreach ($this->menuItems as $lc_item) {
            $lc_html .= $lc_item->getHTML($lc_pos);
            $lc_pos++;
        }
        
        $lc_html .= "</ul>\n<!-- dirapMenu -->\n";
        
        return $lc_html;
    }

    /**
     * Constructeur de la classe
     * 
     * @access public
     */

    public final  function __construct() {

    }


    /**
     * Ajoute un item de menu à ce menu
     * 
     * @access public
     * @param dirapMenuItemInterface $in_menuItem 
     */

    public function appendChild(dirapMenuItemInterface $in_menuItem) {
        $this->menuItems[] = $in_menuItem;
        $in_menuItem->setParent($this);
    }

   /**
     * Fixe le noeud parent du noeud actuel
     * 
     * dirapMenu est un menu père, donc pas de parent théoriquement.
     * 
     * @param dirapMenuItemInterface $in_parent
     */
    public function setParent(dirapMenuItemInterface $in_parent) {
        throw new Exception(__METHOD__ . 
        'Cet objet est censé ne pas avoir de parent');
    }
    
    /**
     * Affiche le code HTML généré
     */
    public function showHTML() {
        echo $this->getHTML(1);
    }
}
?>